package cn.etg.day08;
/**
 * 使用异常捕获机制完成下述IO操作
 * 编写程序，要求下面的类实现功能:
 * 添加新员工
 * 要求用户输入一个员工信息，格式如下:
 * jackson,25,男,5000,2008-12-22
 * 用户输入后需要做下述验证:
 * 要求用户名长度在1-20个字符之间且必须是英文
 * 年龄在0-100之间的整数
 * 性别只能是:"男"或"女"
 * 当发现用户输入有不符合规定时，提醒用户
 * 相关内容输入不符合要求，并要求重新输入。
 * 都输入正确后，将该员工添加到emp.txt文件
 * 的最后一行。
 * 
 * @author Xiloer
 *
 */
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Test06 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input; // 将input变量的声明移到循环外部

        while (true) {
            System.out.println("请输入员工信息，格式如下：");
            System.out.println("name,age,gender,salary,hiredate (例如: jackson,25,男,5000,2008-12-22)");
            input = scanner.nextLine(); // 在循环内部对input变量进行赋值

            // 使用正则表达式验证输入
            String[] parts = input.split(",");
            if (parts.length == 5) {
                String name = parts[0];
                int age = Integer.parseInt(parts[1]);
                String gender = parts[2];
                int salary = Integer.parseInt(parts[3]);
                String hiredate = parts[4];

                // 验证各个字段
                if (isValidName(name) && isValidAge(age) && isValidGender(gender) && isValidHiredate(hiredate)) {
                    break; // 输入正确，跳出循环
                } else {
                    System.out.println("输入有误，请重新输入。");
                }
            } else {
                System.out.println("输入格式不正确，请按照指定格式输入。");
            }
        }

        // 输入正确，将员工信息添加到文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("emp.txt", true))) {
            writer.write(input);
            writer.newLine(); // 添加换行符
            System.out.println("员工信息已成功添加到文件。");
        } catch (IOException e) {
            e.printStackTrace();
        }

        scanner.close();
    }

    // 验证名字
    private static boolean isValidName(String name) {
        return Pattern.matches("[a-zA-Z]{1,20}", name);
    }

    // 验证年龄
    private static boolean isValidAge(int age) {
        return age >= 0 && age <= 100;
    }

    // 验证性别
    private static boolean isValidGender(String gender) {
        return "男".equals(gender) || "女".equals(gender);
    }

    // 验证入职日期
    private static boolean isValidHiredate(String hiredate) {
        return Pattern.matches("\\d{4}-\\d{2}-\\d{2}", hiredate);
    }
}